#ifndef BACKPACK_ACTION_VARIANT_H_
#define BACKPACK_ACTION_VARIANT_H_

#include <boost/variant.hpp>

namespace backpack {

class MessageAction;
class MoveAction;
class AddItemAction;
class EnableAction;
class DisableAction;
class EnabledSwitchAction;
class ShowAction;
class HideAction;
class VisibleSwitchAction;
class LambdaAction;
class UserActivityAction;
class MultiAction;
class EndAction;


// all usable action types must be added to ActionVariant
typedef boost::variant<
  boost::recursive_wrapper<MessageAction>,
  boost::recursive_wrapper<MoveAction>,
  boost::recursive_wrapper<AddItemAction>,
  boost::recursive_wrapper<EnableAction>,
  boost::recursive_wrapper<DisableAction>,
  boost::recursive_wrapper<EnabledSwitchAction>,
  boost::recursive_wrapper<ShowAction>,
  boost::recursive_wrapper<HideAction>,
  boost::recursive_wrapper<VisibleSwitchAction>,
  boost::recursive_wrapper<LambdaAction>,
  boost::recursive_wrapper<UserActivityAction>,
  boost::recursive_wrapper<MultiAction>,
  boost::recursive_wrapper<EndAction>
> ActionVariant;



extern const ActionVariant g_actionNull;




inline bool operator!=(ActionVariant const& rhs, ActionVariant const& lhs) {
  return !(rhs == lhs);
}




} // namespace backpack

#endif // BACKPACK_ACTION_VARIANT_H_

